package cn.jbolt.core.api;

import cn.jbolt.core.controller.base.JBoltCommonController;
import cn.jbolt.core.kit.JBoltControllerKit;
import cn.jbolt.core.model.Application;
import cn.jbolt.core.model.base.JBoltBaseModel;
import cn.jbolt.core.service.base.JBoltBaseService;
import com.jfinal.kit.Ret;

import java.util.List;

/**
 * 所有写接口的Controller 统一继承APIBaseController
 *
 * @ClassName: ApiBaseController
 * @author: JFinal学院-小木 QQ：909854136
 * @date: 2019年9月13日
 */
public abstract class JBoltApiBaseController extends JBoltCommonController {
	@Override
	protected JBoltBaseService<? extends JBoltBaseModel<?>> getModelService() {
		return null;
	}
	/**
	 * 获得当前访问的application
	 *
	 * @return
	 */
	protected Application getApplication() {
		return JBoltApiKit.getApplication();
	}

	/**
	 * 获得当前访问的appId
	 *
	 * @return
	 */
	protected String getAppId() {
		return JBoltApiKit.getAppId();
	}

	/**
	 * 获得当前访问的userId
	 *
	 * @return
	 */
	protected Object getApiUserId() {
		return JBoltApiKit.getApiUserId();
	}

	/**
	 * 获得当前访问的userId to long
	 *
	 * @return
	 */
	protected Long getApiUserIdToLong() {
		return JBoltApiKit.getApiUserIdToLong();
	}

	/**
	 * 获得当前访问的apiUser绑定的其它用户表
	 *
	 * @return
	 */
	protected List<JBoltApiBindUserBean> getBindUsers() {
		return JBoltApiKit.getBindUsers();
	}

	/**
	 * 获得当前访问的ApiUser
	 *
	 * @return
	 */
	protected JBoltApiUser getApiUser() {
		return JBoltApiKit.getApiUser();
	}

	/**
	 * api响应返回 jboltApiRet
	 *
	 * @param ret
	 */
	protected void renderJBoltApiRet(JBoltApiRet ret) {
		JBoltControllerKit.renderJBoltApiRet(this, ret);
	}

	/**
	 * api响应返回 jboltApiRet
	 *
	 * @param ret
	 * @param useJfinalJson
	 */
	protected void renderJBoltApiRet(JBoltApiRet ret,boolean useJfinalJson) {
		JBoltControllerKit.renderJBoltApiRet(this, ret,useJfinalJson);
	}

	/**
	 * api响应返回 jboltApiRet
	 *
	 * @param ret
	 */
	protected void renderJBoltApiRet(Ret ret) {
		renderJBoltApiRet(ret,false);
	}

	/**
	 * api响应返回 jboltApiRet
	 *
	 * @param ret
	 * @param useJfinalJson
	 */
	protected void renderJBoltApiRet(Ret ret,boolean useJfinalJson) {
		JBoltControllerKit.renderJBoltApiRet(this, ret,useJfinalJson);
	}


	/**
	 * api响应SUCCESS 返回jboltApiRet 带着数据
	 * @param data
	 */
	protected void renderJBoltApiSuccessWithData(Object data) {
		renderJBoltApiSuccessWithData(data,false);
	}

	/**
	 * api响应SUCCESS 返回jboltApiRet 带着数据
	 * @param data
	 * @param useJfinalJson  是否使用JFinalJson
	 */
	protected void renderJBoltApiSuccessWithData(Object data,boolean useJfinalJson) {
		renderJBoltApiRet(JBoltApiRet.successWithData(data),useJfinalJson);
	}

	/**
	 * API响应 fail
	 * @param msg
	 */
	protected void renderJBoltApiFail(String msg) {
		renderJBoltApiRet(JBoltApiRet.API_FAIL(msg));
	}

	/**
	 * API响应 fail 带着错误信息和 数据
	 * @param msg
	 * @param data
	 */
	protected void renderJBoltApiFail(String msg, Object data) {
		renderJBoltApiRet(JBoltApiRet.API_FAIL(msg, data));
	}

	/**
	 * API响应 fail 带着错误信息和 数据
	 * @param msg
	 * @param data
	 * @param useJfinalJson
	 */
	protected void renderJBoltApiFail(String msg, Object data,boolean useJfinalJson) {
		renderJBoltApiRet(JBoltApiRet.API_FAIL(msg, data),useJfinalJson);
	}

	/**
	 * API响应 success
	 * @param msg
	 */
	protected void renderJBoltApiSuccess(String msg) {
		renderJBoltApiRet(JBoltApiRet.API_SUCCESS(msg));
	}

	/**
	 * API响应 success
	 */
	protected void renderJBoltApiSuccess() {
		renderJBoltApiRet(JBoltApiRet.API_SUCCESS);
	}

	/**
	 * API响应 success 带着信息和数据
	 * @param msg
	 * @param data
	 */
	protected void renderJBoltApiSuccess(String msg, Object data) {
		renderJBoltApiRet(JBoltApiRet.API_SUCCESS(msg, data));
	}

	/**
	 * API响应 success 带着信息和数据
	 * @param msg
	 * @param data
	 */
	protected void renderJBoltApiSuccess(String msg, Object data,boolean useJfinalJson) {
		renderJBoltApiRet(JBoltApiRet.API_SUCCESS(msg, data),useJfinalJson);
	}
}
